#include "tcpclient.h"

/*
    发送文件流程
        1、把待传输文件名和文件大小告诉服务端
        2、等待服务端的确认报文（文件名和文件大小的确认）
        3、发送文件内容
        4、等待服务端的确认报文（服务端已经接收完文件）
*/

int main(int argc, char *argv[])
{
    if (argc != 5)
    {
        std::cout << "Usage: ./client 服务端ip 服务端port 文件名 文件大小" << std::endl;
        return -1;
    }

    Tcpclient tcpClient;

    bool flag;
    flag = tcpClient.connect(argv[1], std::atoi(argv[2]));
    if (!flag)
    {
        std:: cout << "connect err";
        return -1;
    }
    Fileinfo fileInfo;
    memset(&fileInfo, 0, sizeof(fileInfo));
    strcpy(fileInfo.fileName, argv[3]);
    fileInfo.fileSize = std::atoi(argv[4]);

    // 把文件信息的结构体发送给服务端
    flag = tcpClient.send(&fileInfo, sizeof(fileInfo));
    if (!flag)
    {
        std:: cout << "发送结构体失败";
        return -1;
    }

    std::cout << "发送文件信息的结构体" << fileInfo.fileName << "(" << fileInfo.fileSize << ")" << std::endl;

    // 等待服务端的确认报文（文件名和文件大小的确认）
    std::string buffer;
    flag = tcpClient.recv(buffer, 1024);
    if (!flag)
    {
        std::cout << "recv err";
        return -1;
    }
    std::cout << "接收:" << buffer << std::endl;
    if (buffer != "ok")
    {
        std::cout << "服务端回复有误，退出" << std::endl;
        return -1;
    }
    buffer.clear();

    // 发送文件内容
    flag = tcpClient.sendFile(argv[3], std::atoi(argv[4]));
    if (!flag)
    {
        std::cout << "sendfile err";
        return -1;
    }

    // 等待服务端的确认报文（服务端已经接收完文件）
    flag = tcpClient.recv(buffer, 1024);
    if (!flag)
    {
        std::cout << "recv err";
        return -1;
    }
    std::cout << "接收:" << buffer << std::endl;
    if (buffer != "ok")
    {
        std::cout << "服务端回复有误，退出" << std::endl;
        return -1;
    }
    
    return 0;
    
}


